package Question5_7;
public class BitInteger {
public static int INTEGER_SIZE;
private boolean[] bits;
public BitInteger() {
bits = new boolean[INTEGER_SIZE];
}
/* Creates a number equal to given value. Takes time proportional
* to INTEGER_SIZE. */
public BitInteger(int value){
bits = new boolean[INTEGER_SIZE];
for (int j = 0; j < INTEGER_SIZE; j++){
if (((value >> j) & 1) == 1) bits[INTEGER_SIZE - 1 - j] = true;
else bits[INTEGER_SIZE - 1 - j] = false;
}
}
/** Returns k-th most-significant bit. */
public int fetch(int k){
if (bits[k]) return 1;
else return 0;
}
/** Sets k-th most-significant bit. */
public void set(int k, int bitValue){
if (bitValue == 0 ) bits[k] = false;
else bits[k] = true;
}
/** Sets k-th most-significant bit. */
public void set(int k, char bitValue){
if (bitValue == '0' ) bits[k] = false;
else bits[k] = true;
}
/** Sets k-th most-significant bit. */
public void set(int k, boolean bitValue){
bits[k] = bitValue;
}
public void swapValues(BitInteger number) {
for (int i = 0; i < INTEGER_SIZE; i++) {
int temp = number.fetch(i);
number.set(i, this.fetch(i));
this.set(i, temp);
}
}
public int toInt() {
int number = 0;
for (int j = INTEGER_SIZE - 1; j >= 0; j--){
number = number | fetch(j);
if (j > 0) {
number = number << 1;
}
}
return number;
}
}